package com.zmn.oms.business.interfaces.conf.distribute;

import com.zmn.common.dto2.Option;
import com.zmn.oms.common.exception.OmsBaseException;
import com.zmn.oms.model.dio.conf.distribute.DistributeWeightPlatDIO;
import com.zmn.oms.model.entity.conf.distribute.*;
import com.zmn.oms.model.vo.conf.distribute.DistributeGroupNameValueVO;
import com.zmn.oms.model.vo.conf.distribute.DistributeWeightAreaVO;

import java.util.List;
import java.util.Map;

/**
 * 描述：派单配置业务服务
 *
 * @author: Yangk
 * @since : 2021年1月27日
 */
public interface DistributeWeightPlatBService {

    /**
     * 获取服务商派单的平台配置
     *
     * @param distributePlatId
     * @return
     */
    DistributeWeightPlat findByKey(Integer distributePlatId);

    /**
     * 获取服务商派单的平台配置
     * 获取第一条
     *
     * @param plat
     * @param bizType
     * @return
     */
    DistributeWeightPlat findServiceProviderConfigByPlatAndBizType(Integer plat, Integer bizType);

    /**
     * 获取服务商派单的平台配置列表
     *
     * @param platList
     * @param bizType
     * @return
     */
    List<DistributeWeightPlat> listServiceProviderConfigByPlatIdAndBizType(List<Integer> platList, Integer bizType);

    /**
     * 获取平台直派的平台配置
     * 获取第一条
     *
     * @param plat
     * @param bizType
     * @return
     */
    DistributeWeightPlat findPlatDirectlyConfigByPlatAndBizTypeAndCityId(Integer plat, Integer bizType, Integer cityId);

    /**
     * 获取平台直派平台配置列表
     *
     * @param platList
     * @param bizType
     * @return
     */
    List<DistributeWeightPlat> listPlatDirectlyConfigByPlatIdAndBizType(List<Integer> platList, Integer bizType);

    /**
     * 更新
     *
     * @param distributeWeightPlat
     * @return
     */
    Integer updateByKey(DistributeWeightPlat distributeWeightPlat);

    /**
     * 更新状态
     *
     * @param query
     * @return
     */
    Integer updateStatusByQuery(DistributeWeightStatusQuery query);

    /**
     * 批量更新
     * @param dioList
     * @return
     */
    Integer updateBatchByKey(List<DistributeWeightPlatDIO> dioList);

    /**
     * 编辑启用/停用状态
     *
     * @param updateStatusQuery
     * @return
     */
    Integer updateStatus(UpdateStatusQuery updateStatusQuery) throws OmsBaseException;


    /**
     * 保存分组保护为当前周分组到缓存中和数据库中
     */
    void saveEngineerLevelGroupToCurrent();

    /**
     * 插入
     *
     * @param distributeWeightPlat
     * @return
     */
    Integer insert(DistributeWeightPlat distributeWeightPlat);

    /**
     * 获取省级下拉框数据对象
     *
     * @return
     */
    List<DistributeWeightAreaVO> listProvince(Integer selectedValue);

    /**
     * 获取市级下拉框数据对象
     *
     * @param searchCityQuery
     * @return
     */
    List<DistributeWeightAreaVO> listCityByProvince(SearchCityQuery searchCityQuery);

    /**
     * 获取平台直派的平台配置
     * 获取第一条
     *
     * @param query
     * @return
     */
    DistributeWeightPlat findPlatDirectlyConfigByQuery(RobOrderQuery query);


    /**
     *  新的产品组和旧的产品组进行去重
     * @param oldMap 旧的产品组
     * @param newList 新的产品组
     * @return
     */
    List<DistributeGroupNameValueVO> distinctDistributeGroup(Map oldMap, List<Option<Integer>> newList);

}
